/*
 * app_broadcast_retry.h
 *
 *  Created on: 2023年9月4日
 *      Author: HXF
 */

#ifndef APP_BROADCAST_RETRY_H_
#define APP_BROADCAST_RETRY_H_

#include "softwareMultiTimer.h"

#ifdef HUB_DEVICE
/**
 * @brief start_timer_to_trigger_broadcast_retry hub端触发双向广播之后，调用该函数，超时重传
 *
 * @param oneway, 单向广播的btype数组，
 * oneway_size， oneway数组长度，
 * twoway， 双向广播的数组
 * 其中，sounder按照btype, bseq, bitmask[0], bitmask[1]的顺序填入twoway，
 * keypad按照btype, bseq, bitmask的顺序填入twoway；
 * Switch按照btype, bseq, len, (NO, Data)[n]的顺序填入twoway；
 * updateme,按照btype,len,ctrl,ID[]的顺序填入twoway；
 * twoway_size， twoway数组长度，
 * end，结束重传判断的标志
 * flag，允许重传的flag
 * ota, 是否是OTA相关的应用，比如固件升级、文件校验请求等
 * @return int 0: success, other: fail.
 */
int start_timer_to_trigger_broadcast_retry(char *oneway, int oneway_size,
                                                 char *twoway, int twoway_size,
                                                 char *count, char max_count,
                                                 char *flag, char ota);
/**
 * @brief maybe_receve_rfm_broadcast_respons hub端收到0x2f物模型后，调用该函数
 *
 * @param
 * rfmid, rfmid, 用于判断哪个rfm的广播应答
 * btype, 0x2f物模型里的value
 * bseq, 0x2f物模型里的value长度
 * @return int 0: success, other: fail.
 */
int maybe_receve_rfm_broadcast_respons(unsigned char rfmid,
                                       unsigned char *value_buf, int value_buf_len);

void stop_ota_broadcast_retry_timer(void);
void stop_twoway_broadcast_retry_timer(void);

#else
/**
 * @brief start_timer_to_trigger_twoway_response rfm端收到双向广播后，调用该函数
 *
 * @param twoway， 双向广播的数组
 *  其中，sounder按照btype, bseq, bitmask[0], bitmask[1]的顺序填入twoway，
 * keypad按照btype, bseq, bitmask的顺序填入twoway；
 * updateme,按照btype,len,ctrl,ID[]的顺序填入twoway；
 * twoway_size， twoway数组长度，
 * flag，允许上报的flag
 * @return int 0: success, other: fail.
 */
int start_timer_to_trigger_twoway_response(char *twoway, int twoway_size, char *flag);

/**
 * @brief start_timer_to_trigger_updateme_response rfm端收到updateme广播后，调用该函数
 *
 * @param msg， updateme数组
 *  其中，msg[0]填是否是ota,1是；其他否
 * msg[1]填ctrl字段
 * 如果不是ota的updateme,待增加
 * msg_size，msg数组的长度
 * flag，允许上报的flag
 * @return int 0: success, other: fail.
 */
int start_timer_to_trigger_updateme_response(char *msg, int msg_size, char *flag);
#endif
#endif /* APP_BROADCAST_RETRY_H_ */
